package Repositorio;

import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import Dados.Paciente;
import Dados.Pessoa;

public class RepositorioPaciente {
	private Statement stmt;
	private String sqlStatement;
	public RepositorioPaciente() {
		stmt = Conexao.getInstance().stmt;
	}
	public void cadastrarPaciente(Paciente p) throws SQLException {
		RepositorioPessoa repPessoa = new RepositorioPessoa();
		if(!repPessoa.verificarPessoa(p.getCpf())) {
			Pessoa pessoa = new Pessoa(p.getCpf(), p.getNome(), p.getDataNascimento(), p.getEndereco(), p.getTelefone());
			repPessoa.cadastrarPessoa(pessoa);
		}
		sqlStatement = "INSERT INTO Paciente VALUES('"+p.getCpf()+"')";
		stmt.executeUpdate(sqlStatement);
		RepositorioPlano repPlano = new RepositorioPlano();
		if(repPlano.verificarPlano(p.getPlano())) {
			RepositorioPacientePlano repPacPlano = new RepositorioPacientePlano();
			repPacPlano.cadastrarPacientePlano(p.getCpf(), p.getPlano(), p.getTipo_plano(), p.getNum_carteira_plano(), p.getFidelidade());
		}
	}
	public void editarPaciente(Paciente p) throws SQLException {
		RepositorioPessoa repPessoa = new RepositorioPessoa();
		Pessoa pessoa = new Pessoa(p.getCpf(), p.getNome(), p.getDataNascimento(), p.getEndereco(), p.getTelefone());
		repPessoa.editarPessoa(pessoa);
		RepositorioPlano repPlano = new RepositorioPlano();
		RepositorioPacientePlano repPacPlano = new RepositorioPacientePlano();
		if(!repPacPlano.verificarPacientePlano(p.getCpf()) && repPlano.verificarPlano(p.getPlano())) {
			repPacPlano.cadastrarPacientePlano(p.getCpf(), p.getPlano(), p.getTipo_plano(), p.getNum_carteira_plano(),p.getFidelidade());
		}
		else if(repPacPlano.verificarPacientePlano(p.getCpf()) && repPlano.verificarPlano(p.getPlano())) {
			repPacPlano.editarPacientePlano(p.getCpf(), p.getPlano(), p.getTipo_plano(), p.getNum_carteira_plano(),p.getFidelidade());
		}
		else if(repPacPlano.verificarPacientePlano(p.getCpf()) && !repPlano.verificarPlano(p.getPlano())) {
			repPacPlano.removerPacientePlano(p.getCpf());
		}
	}
	public void removerPaciente(String cpf) throws SQLException {
		RepositorioPessoa repPessoa = new RepositorioPessoa();
		sqlStatement = "DELETE FROM Paciente WHERE cpf='"+cpf+"'";
		stmt.executeUpdate(sqlStatement);
		repPessoa.removerPessoa(cpf);
	}
	public Paciente consultarPaciente(String cpf) throws SQLException {
		Paciente p;
		RepositorioPessoa repPessoa = new RepositorioPessoa();
		Pessoa pessoa = repPessoa.consultarPessoa(cpf);
		RepositorioPacientePlano repPacPlano = new RepositorioPacientePlano();
		if(repPacPlano.verificarPacientePlano(cpf)) {
			String pacPlano[] = repPacPlano.consultarPacientePlano(cpf);
			p = new Paciente(pessoa, pacPlano[0], pacPlano[1], pacPlano[2], Date.valueOf(pacPlano[3]));
		} else {
			p = new Paciente(pessoa);
		}
		return p;
	}
	public boolean verificarPaciente(String cpf) throws SQLException {
		boolean ret;
		sqlStatement = "SELECT * FROM Paciente WHERE cpf='"+cpf+"'";
		ResultSet rs = stmt.executeQuery(sqlStatement);
		if(rs.next()) {
			ret = true;
		} else {
			ret = false;
		}
		return ret;
	}
};
